package hamsterteam.hop.controller;

import hamsterteam.hop.ejb.EnseignantEJB;
import hamsterteam.hop.ejb.EtudiantEJB;
import hamsterteam.hop.ejb.ProjetEJB;
import hamsterteam.hop.model.Etudiant;
import hamsterteam.hop.model.Projet;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.ejb.EJB;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;
import javax.servlet.http.HttpServletRequest;

@ManagedBean
@SessionScoped
public class ProjetController {
    private Projet selected;

    @EJB
    private ProjetEJB projetEJB;

    @EJB
    private EtudiantEJB etudiantEJB;

    @EJB
    private EnseignantEJB enseignantEJB;

    private HtmlDataTable dataTable;

    private Projet projet = new Projet();
    private ListDataModel projetList; // j'ai utilisé un ListDataModel et pas List parce que cela permet de retrouver l'élément sélectionné dans la liste (pour l'édition d'un livre)

    private String recherche;
   
    private List<Etudiant> tousEtu;

    private void updateProjetList() {
        if (recherche == null || recherche.length() == 0)
            projetList = new ListDataModel(projetEJB.findAll());
        else
            projetList = new ListDataModel(projetEJB.findTexte(recherche));
    }

    public String doSearch() {
        return "listProjet.xhtml";
    }

    public String doCancelSearch() {
        recherche = null;
        return "listProjet.xhtml";
    }

    public String doNew() {
        tousEtu = etudiantEJB.findAll();
        projet = new Projet();
        return "newProjet.xhtml";
    }

    public String doCreate() {
        HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
        long ensId = Long.parseLong(req.getParameter("enseignant"));
        projet.getEtudiants().clear();
        projet.setResponsable(enseignantEJB.findId(ensId));
        for (Etudiant etu : tousEtu)
            if (etu.isSelected())
                projet.getEtudiants().add(etu);
        projet = projetEJB.create(projet);
        selected = projet;
        return "viewProjet.xhtml";
    }
    
    public String doCancel() {
        updateProjetList();
        return "listProjet.xhtml";
    }

    public String doEdit() {
        tousEtu = etudiantEJB.findAll();
        for (Etudiant etu : tousEtu)
            if (selected.getEtudiants().contains(etu))
                etu.setSelected(true);
        return "editProjet.xhtml";
    }
    
    public String doCancelEdit() {
        return "viewProjet.xhtml";
    }

    public String doDelete() {
        projetEJB.delete(selected);
        updateProjetList();
        return "listProjet.xhtml";
    }
    
    public String doSelect() {
        HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
        long selectedId = Long.parseLong(req.getParameter("selected"));
        if (selectedId > 0)
        {
            selected = projetEJB.findId(selectedId);
        }
        return "viewProjet.xhtml";
    }

    public String doSave() {
        selected.getEtudiants().clear();
        for (Etudiant etu : tousEtu)
            if (etu.isSelected())
                selected.getEtudiants().add(etu);
        projet = projetEJB.update(selected);
        return "viewProjet.xhtml";
    }

    public Projet getProjet() {
        return projet;
    }

    public void setProjet(Projet projet) {
        this.projet = projet;
    }

    public ListDataModel getProjetList() {
        updateProjetList();
        return projetList;
    }

    public void setProjetList(ListDataModel projetList) {
        this.projetList = projetList;
    }

    public HtmlDataTable getDataTable() {
        return dataTable;
    }

    public void setDataTable(HtmlDataTable dataTable) {
        this.dataTable = dataTable;
    }

    public String getRecherche() {
        return recherche;
    }

    public void setRecherche(String recherche) {
        this.recherche = recherche;
    }

    public Projet getSelected() {
        return selected;
    }

    public void setSelected(Projet selected) {
        this.selected = selected;
    }

    public List<Etudiant> getTousEtu() {
        return tousEtu;
    }

    public void setTousEtu(List<Etudiant> tousEtu) {
        this.tousEtu = tousEtu;
    }

}